/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package managers;

import DAO.UsuarioDAO;
import JPA.JPAUsuarioDAO;
import domain.Entity.EntityDireccion;
import domain.Entity.EntityGestor;
import domain.Entity.EntityPerfil;
import domain.Entity.EntityTrabajador;
import domain.Entity.EntityUsuario;
import java.util.Date;
import java.util.List;

/**
 *
 * @author jorge
 */
public class UsuarioManager {

     private UsuarioDAO usuario;
     private static UsuarioManager instance = null;
        
  	
        public static synchronized UsuarioManager getInstance(){
		if(instance == null){
			instance = new UsuarioManager();
			return instance;
		}
		else
			return instance;
	}
        
	
	private UsuarioManager(){
		this.usuario =new JPAUsuarioDAO();
	}

    public void addGestor(long dni, String email, String contrasena, String nombre) {
            EntityGestor eg = new EntityGestor();
            EntityPerfil ep = new EntityPerfil();
            EntityDireccion ed = new EntityDireccion();
            ep.setEu(eg);
            ed.setEp(ep);
            eg.setEp(ep);
            ep.setEd(ed);
            eg.setDni(dni);
            eg.setEmail(email);
            eg.setNombre(nombre);
            eg.setContrasena(contrasena);
            eg.setTipo("gestor");
            
            usuario.anadirGestor(eg);
    }
	
	public EntityUsuario get(String nombre){
    	return this.usuario.obtenerUsuario(nombre);
        }
        
        public EntityTrabajador getTrabajador(long dni){
    	return this.usuario.obtenerTrabajador(dni);
        }
        
       
        
        public void addTrabajador(EntityGestor gestor,long dni,String email,String contrasena,String nombre){
    	 EntityTrabajador et = new EntityTrabajador();
            EntityPerfil ep = new EntityPerfil();
            EntityDireccion ed = new EntityDireccion();
            ep.setEu(et);
            ed.setEp(ep);
            et.setEp(ep);
            ep.setEd(ed);
            et.setEg(gestor);
            et.setDni(dni);
            et.setEmail(email);
            et.setContrasena(contrasena);
            et.setTipo("trabajador");
            et.setNombre(nombre);
            usuario.anadirTrabajador(et);
        }

    public void modificarPerfil(String apellidos, String nombre, int telefono, Date fechaNac, int cp, String localidad, String nombreCalle, String piso, String pais, Integer numero, String provincia, String tipo,EntityPerfil ep,EntityDireccion ed) {
        
        ep.setApellidos(apellidos);
        ep.setNombre(nombre);
        ep.setTelefono(telefono);
        ep.setFechaNac(fechaNac);
        
        ed.setCp(cp);
        ed.setLocalidad(localidad);
        ed.setNombre(nombreCalle);
        ed.setPiso(piso);
        ed.setPais(pais);
        ed.setNumero(numero);
        ed.setProvincia(provincia);
        ed.setTipo(tipo);
        
        usuario.modificarPerfil(ep, ed);
    }
        
        public List mostrarTrabajadoresGestor(Long dni){
           return this.usuario.TrabajadoresGestor(dni);
        }
        
       public EntityTrabajador borrarTrabajador(Long dni){
          return this.usuario.borrarTrabajador(dni);
       }
       
        
       public EntityGestor obetenerGestor(long dni){
           return this.usuario.obtenerGestor(dni);
       }
        
       public EntityPerfil obetenerPerfilUsuario(long dni){
           return this.usuario.obtenerPerfil(dni);
       }
       
       public EntityDireccion obetenerDireccionUsuario(long idPerfil){
           return this.usuario.obtenerDireccion(idPerfil);
       }
       
       
}
